1100
How can I advance to the next line, once the user presses the ENTER key

// KeyDown event - Occurs when the user presses a key while an object has the focus.
procedure TForm1.Grid1KeyDown(ASender: TObject; var KeyCode : Smallint;Shift : Smallint);
begin
	with Grid1 do
	begin
		OutputDebugString( 'KeyCode Before:' );
		OutputDebugString( KeyCode );
		KeyCode := FormatABC('value = 13 ? 40 : value',OleVariant(KeyCode),Null,Null);
		OutputDebugString( 'KeyCode After:' );
		OutputDebugString( KeyCode );
	end
end;

with Grid1 do
begin
	BeginUpdate();
	with Columns do
	begin
		with (IUnknown(Add('A')) as EXGRIDLib_TLB.Column).Editor do
		begin
			Appearance := EXGRIDLib_TLB.EtchedApp;
			EditType := EXGRIDLib_TLB.EditType;
		end;
		with (IUnknown(Add('B')) as EXGRIDLib_TLB.Column).Editor do
		begin
			Appearance := EXGRIDLib_TLB.EtchedApp;
			EditType := EXGRIDLib_TLB.EditType;
		end;
	end;
	with Items do
	begin
		h0 := AddItem('Item A.1');
		CellValue[OleVariant(h0),OleVariant(1)] := 'Item B.1';
		h0 := AddItem('Item A.2');
		CellValue[OleVariant(h0),OleVariant(1)] := 'Item B.2';
	end;
	EndUpdate();
end
1099
I am using AddNew to add new records, but I can not see them into the control

// ButtonClick event - Occurs when user clicks on the cell's button.
procedure TForm1.Grid1ButtonClick(ASender: TObject; Item : HITEM;ColIndex : Integer;Key : OleVariant);
begin
	with Grid1 do
	begin
		with (IUnknown(DataSource) as ADODB_TLB.Recordset) do
		begin
			AddNew(Null,Null);
			Fields.Item['A'].Value := 'new A';
			Fields.Item['B'].Value := 'new B';
			Update(Null,Null);
		end;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	HeaderAppearance := EXGRIDLib_TLB.Etched;
	rs := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADODB.Recordset'))) as ADODB_TLB.Recordset);
	with rs do
	begin
		Fields.Append('A',8,Null,Null,Null);
		Fields.Append('B',8,Null,Null,Null);
		Open(Null,Null,Null,Null,Null);
		AddNew(Null,Null);
		Fields.Item['A'].Value := 'Item A.1';
		Fields.Item['B'].Value := 'Item B.1';
		Update(Null,Null);
		AddNew(Null,Null);
		Fields.Item['A'].Value := 'Item A.2';
		Fields.Item['B'].Value := 'Item B.2';
		Update(Null,Null);
	end;
	DataSource := (IUnknown(rs) as ADODB_TLB.Recordset);
	with Items do
	begin
		LockedItemCount[EXGRIDLib_TLB.exTop] := 1;
		h := LockedItem[EXGRIDLib_TLB.exTop,0];
		ItemDivider[h] := 0;
		CellHasButton[OleVariant(h),OleVariant(0)] := True;
		CellValue[OleVariant(h),OleVariant(0)] := 'AddNew';
		CellHAlignment[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.CenterAlignment;
	end;
	DetectAddNew := True;
	DetectDelete := True;
	EndUpdate();
end
1098
How can I create a new ADO recordset

with Grid1 do
begin
	BeginUpdate();
	rs := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADODB.Recordset'))) as ADODB_TLB.Recordset);
	with rs do
	begin
		Fields.Append('A',8,Null,Null,Null);
		Fields.Append('B',8,Null,Null,Null);
		Open(Null,Null,Null,Null,Null);
		AddNew(Null,Null);
		Fields.Item['A'].Value := 'Item A.1';
		Fields.Item['B'].Value := 'Item B.1';
		Update(Null,Null);
		AddNew(Null,Null);
		Fields.Item['A'].Value := 'Item A.2';
		Fields.Item['B'].Value := 'Item B.2';
		Update(Null,Null);
	end;
	DataSource := (IUnknown(rs) as ADODB_TLB.Recordset);
	EndUpdate();
end
1097
Do do I get the DAO version I have installed

with Grid1 do
begin
	OutputDebugString( (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.35'))) as DAO_TLB.PrivDBEngine).Version );
	OutputDebugString( (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.36'))) as DAO_TLB.PrivDBEngine).Version );
	OutputDebugString( (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.120'))) as DAO_TLB.PrivDBEngine).Version );
end
1096
How do I get a list of interfaces the object implemenets

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.120'))) as DAO_TLB.PrivDBEngine) do
	begin
		rs := (IUnknown(OpenDatabase('C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',Null,Null,Null).OpenRecordset('Orders',Null,Null,Null)) as DAO_TLB.Recordset2);
	end;
	OutputDebugString( (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.PropertiesList'))) as EXPROPERTIESLISTLib_TLB.PropertiesList).Interfaces[rs] );
	DataSource := (IUnknown(rs) as DAO_TLB.Recordset2);
	EndUpdate();
end
1095
Do do I get the ADO version I have installed

with Grid1 do
begin
	OutputDebugString( 'ADO Version:' );
	OutputDebugString( (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADODB.Connection'))) as ADODB_TLB.Connection).Version );
end
1094
DAO, ACCDB, 120

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.120'))) as DAO_TLB.PrivDBEngine) do
	begin
		rs := (IUnknown(OpenDatabase('C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',Null,Null,Null).OpenRecordset('Orders',Null,Null,Null)) as DAO_TLB.Recordset2);
	end;
	DataSource := (IUnknown(rs) as DAO_TLB.Recordset2);
	EndUpdate();
end
1093
DAO, MDB, 120

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.120'))) as DAO_TLB.PrivDBEngine) do
	begin
		rs := (IUnknown(OpenDatabase('C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',Null,Null,Null).OpenRecordset('Orders',Null,Null,Null)) as DAO_TLB.Recordset2);
	end;
	DataSource := (IUnknown(rs) as DAO_TLB.Recordset2);
	EndUpdate();
end
1092
DAO, MDB

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('DAO.DBEngine.36'))) as DAO_TLB.PrivDBEngine) do
	begin
		rs := OpenDatabase('C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.mdb',Null,Null,Null).OpenRecordset('Orders',Null,Null,Null);
	end;
	DataSource := (IUnknown(rs) as DAO_TLB.Recordset);
	EndUpdate();
end
1091
ADODB, ACCDB, x64

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	rs := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADODB.Recordset'))) as ADODB_TLB.Recordset);
	with rs do
	begin
		Open('Orders','Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',1,1,Null);
	end;
	DataSource := (IUnknown(rs) as ADODB_TLB.Recordset);
	EndUpdate();
end
1090
ADOR, ACCDB

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	rs := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADOR.Recordset'))) as ADODB_TLB.Recordset);
	with rs do
	begin
		Open('Orders','Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',3,3,Null);
	end;
	DataSource := (IUnknown(rs) as ADODB_TLB.Recordset);
	EndUpdate();
end
1089
ADODB, MDB

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	rs := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADODB.Recordset'))) as ADODB_TLB.Recordset);
	with rs do
	begin
		Open('Orders','Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',3,3,Null);
	end;
	DataSource := (IUnknown(rs) as ADODB_TLB.Recordset);
	EndUpdate();
end
1088
ADOR, MDB

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := False;
	rs := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('ADOR.Recordset'))) as ADODB_TLB.Recordset);
	with rs do
	begin
		Open('Orders','Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb',3,3,Null);
	end;
	DataSource := (IUnknown(rs) as ADODB_TLB.Recordset);
	EndUpdate();
end
1087
How can I display the row on multiple lines (excrd)

with Grid1 do
begin
	BeginUpdate();
	HeaderAppearance := EXGRIDLib_TLB.Etched;
	SelBackMode := EXGRIDLib_TLB.exTransparent;
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellFormatLevel] := '[b=0]60;1[b=15]:60,((20;"<fgcolor=808080>Dateigröße"[b=1][a=2]:120,2[b=15])/(20;"<fgcolor=808080>Erstellt am"[a=2]:120,3[b=15])/' + 
	'(20;"<fgcolor=808080>Zuletzt bearbeitet"[b=4][a=2]:120,4[b=15]))';
		AllowSort := False;
	end;
	(IUnknown(Columns.Add(1)) as EXGRIDLib_TLB.Column).Visible := False;
	with (IUnknown(Columns.Add(2)) as EXGRIDLib_TLB.Column) do
	begin
		Visible := False;
		Editor.EditType := EXGRIDLib_TLB.EditType;
		FormatColumn := '1 index `A-Z`';
	end;
	with (IUnknown(Columns.Add(3)) as EXGRIDLib_TLB.Column) do
	begin
		Visible := False;
		Editor.EditType := EXGRIDLib_TLB.EditType;
		FormatColumn := '1 index ``';
	end;
	with (IUnknown(Columns.Add(4)) as EXGRIDLib_TLB.Column) do
	begin
		Visible := False;
		Editor.EditType := EXGRIDLib_TLB.EditType;
		FormatColumn := 'date(``)';
	end;
	DefaultItemHeight := 48;
	DrawGridLines := EXGRIDLib_TLB.exRowLines;
	GridLineStyle := EXGRIDLib_TLB.exGridLinesSolid;
	ViewModeOption[EXGRIDLib_TLB.exTableView,EXGRIDLib_TLB.exBorderWidth] := OleVariant(1);
	ViewModeOption[EXGRIDLib_TLB.exTableView,EXGRIDLib_TLB.exBorderHeight] := OleVariant(1);
	with Items do
	begin
		CellValue[OleVariant(AddItem('')),OleVariant(1)] := 'One';
		CellValue[OleVariant(AddItem('')),OleVariant(1)] := 'Two';
		CellValue[OleVariant(AddItem('')),OleVariant(1)] := 'Three';
	end;
	EndUpdate();
end
1086
Type of wraps the cell's caption support (Sample 2)

with Grid1 do
begin
	BeginUpdate();
	HeaderSingleLine := False;
	HeaderHeight := 36;
	DrawGridLines := EXGRIDLib_TLB.exRowLines;
	ColumnAutoResize := False;
	ScrollBySingleLine := True;
	with Columns do
	begin
		with (IUnknown(Add('Single-Line (exCaptionSingleLine)')) as EXGRIDLib_TLB.Column) do
		begin
			Width := 96;
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
			Def[EXGRIDLib_TLB.exCellSingleLine] := OleVariant(-1);
		end;
		with (IUnknown(Add('Word-Wrap (exCaptionWordWrap)')) as EXGRIDLib_TLB.Column) do
		begin
			Width := 96;
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
			Def[EXGRIDLib_TLB.exCellSingleLine] := OleVariant(0);
			FormatColumn := '%0';
		end;
		with (IUnknown(Add('Break-Wrap (exCaptionBreakWrap)')) as EXGRIDLib_TLB.Column) do
		begin
			Width := 96;
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
			Def[EXGRIDLib_TLB.exCellSingleLine] := OleVariant(1);
			FormatColumn := '%0';
		end;
	end;
	with Items do
	begin
		AddItem('This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.');
		AddItem('This is the <b>first</b> line.\r\nThis is the <b>second</b> line.\r\nThis is the <b>third</b> line.');
	end;
	EndUpdate();
end
1085
Type of wraps the cell's caption support (Sample 1)

with Grid1 do
begin
	BeginUpdate();
	HeaderSingleLine := False;
	HeaderHeight := 36;
	DrawGridLines := EXGRIDLib_TLB.exRowLines;
	ColumnAutoResize := False;
	ScrollBySingleLine := True;
	(IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column).Width := 128;
	with Items do
	begin
		h := AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.');
		h := AddItem('This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.');
		CellValueFormat[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exHTML;
		h := AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.');
		CellSingleLine[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exCaptionWordWrap;
		h := AddItem('This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.');
		CellValueFormat[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exHTML;
		CellSingleLine[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exCaptionWordWrap;
		h := AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.');
		CellSingleLine[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exCaptionBreakWrap;
		h := AddItem('This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.');
		CellValueFormat[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exHTML;
		CellSingleLine[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exCaptionBreakWrap;
	end;
	EndUpdate();
end
1084
Can I break the cell's caption using the line break <br> or \r\n (Sample 2)

with Grid1 do
begin
	BeginUpdate();
	DrawGridLines := EXGRIDLib_TLB.exRowLines;
	ColumnAutoResize := False;
	ScrollBySingleLine := True;
	(IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column).Width := 128;
	with Items do
	begin
		CellSingleLine[OleVariant(AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.')),OleVariant(0)] := EXGRIDLib_TLB.exCaptionBreakWrap;
		AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.');
	end;
	EndUpdate();
end
1083
Can I break the cell's caption using the line break <br> or \r\n (Sample 1)

with Grid1 do
begin
	BeginUpdate();
	DrawGridLines := EXGRIDLib_TLB.exRowLines;
	ColumnAutoResize := False;
	ScrollBySingleLine := True;
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Width := 128;
		Def[EXGRIDLib_TLB.exCellSingleLine] := OleVariant(1);
	end;
	with Items do
	begin
		AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.');
		AddItem('This is the first line.\r\nThis is the second line.\r\nThis is the third line.');
	end;
	EndUpdate();
end
1082
How can I change the visual appearance/color of the Filter For ... field

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	BackColorHeader := RGB(1,0,0);
	ForeColorHeader := RGB(255,255,255);
	Background[EXGRIDLib_TLB.exBackColorFilter] := BackColorHeader;
	Background[EXGRIDLib_TLB.exForeColorFilter] := ForeColorHeader;
	Background[EXGRIDLib_TLB.exHeaderFilterBarButton] := $f0f0f0;
	Background[EXGRIDLib_TLB.exCursorHoverColumn] := $ffffffff;
	HeaderAppearance := EXGRIDLib_TLB.Bump;
	with (IUnknown(Columns.Add('Items')) as EXGRIDLib_TLB.Column) do
	begin
		FilterOnType := True;
		DisplayFilterButton := True;
		FilterList := EXGRIDLib_TLB.exNoItems;
	end;
	with Items do
	begin
		h := AddItem('Root 1');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
		h := AddItem('Root 2');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
	end;
	EndUpdate();
end
1081
How can I display the cell's caption without spaces on both sides

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := True;
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		FormatColumn := '((trim(value) replace `   ` with ` `) replace `  ` with ` `) replace ` ` with `<bgcolor=FF0000> </bgcolor>`';
	end;
	with Items do
	begin
		AddItem('');
		AddItem('Item A');
		AddItem('    Item B');
		AddItem('        Item   C    ');
	end;
	EndUpdate();
end
1080
How can I highlight the spaces within the column (sample 2)

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := True;
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		FormatColumn := '`''` + ( value replace ` ` with `_` ) + `''`';
	end;
	with Items do
	begin
		AddItem('');
		AddItem('Item A');
		AddItem('    Item B');
		AddItem('        Item   C    ');
	end;
	EndUpdate();
end
1079
How can I highlight the spaces within the column (sample 1)

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := True;
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		FormatColumn := 'len(value) = 0 ? `<bgcolor=FF0000> </bgcolor>` : ( value replace ` ` with `<bgcolor=FF0000> </bgcolor>` )';
	end;
	with Items do
	begin
		AddItem('');
		AddItem('Item A');
		AddItem('    Item B');
		AddItem('        Item   C    ');
	end;
	EndUpdate();
end
1078
How can I change the visual aspect of the drop down filter-calendar

with Grid1 do
begin
	BeginUpdate();
	Background[EXGRIDLib_TLB.exBackColorFilter] := $10000;
	Background[EXGRIDLib_TLB.exForeColorFilter] := $ffffff;
	Background[EXGRIDLib_TLB.exDateScrollRange] := $ffffff;
	Background[EXGRIDLib_TLB.exDateHeader] := Background[EXGRIDLib_TLB.exBackColorFilter];
	Background[EXGRIDLib_TLB.exDateScrollThumb] := $808080;
	with (IUnknown(Columns.Add('Date')) as EXGRIDLib_TLB.Column) do
	begin
		FilterType := EXGRIDLib_TLB.exDate;
		DisplayFilterButton := True;
		DisplayFilterDate := True;
		DisplayFilterPattern := False;
	end;
	EndUpdate();
end
1077
How can I hide the filter bar description

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Filter')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'B';
	end;
	with Items do
	begin
		AddItem('A');
		AddItem('B');
		AddItem('C');
	end;
	ApplyFilter();
	FilterBarHeight := 0;
	EndUpdate();
end
1076
Export Data in HTML format

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	BackColorAlternate := RGB(240,240,240);
	DrawGridLines := EXGRIDLib_TLB.exAllLines;
	HeaderAppearance := EXGRIDLib_TLB.Etched;
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(( ( value replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `' + 
	'[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( match' + 
	'itemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcoun' + 
	't + ` item(s)`) )))';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarShowCloseIfRequired) Or Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	FilterBarPromptType := EXGRIDLib_TLB.exFilterPromptContainsAny;
	with ConditionalFormats do
	begin
		Add('%0 like `*parent*`','parent').BackColor := $c0c0c0;
		with Add('%0 like `*child*`','child') do
		begin
			ForeColor := $8080ff;
			ApplyTo := EXGRIDLib_TLB.exFormatToColumns;
		end;
		with Add('%0 like `*B*`','b') do
		begin
			ForeColor := $ff0000;
			Bold := True;
			Italic := True;
			ApplyTo := EXGRIDLib_TLB.exFormatToColumns;
		end;
	end;
	with Columns do
	begin
		with (IUnknown(Add('Value')) as EXGRIDLib_TLB.Column) do
		begin
			Width := 128;
			HTMLCaption := '<b>VA</b><r>sko';
		end;
		with (IUnknown(Add('APos')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 apos ``';
			AllowSort := False;
			Def[EXGRIDLib_TLB.exCellBackColor] := OleVariant(15790320);
			Def[EXGRIDLib_TLB.exCellForeColor] := OleVariant(8421504);
			Def[EXGRIDLib_TLB.exHeaderForeColor] := Def[EXGRIDLib_TLB.exCellForeColor];
			Position := 0;
		end;
		with (IUnknown(Add('RPos')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 rpos ``';
			AllowSort := False;
			Position := 1;
		end;
		with (IUnknown(Add('Index')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index ``';
			DisplayFilterButton := True;
			FilterList := EXGRIDLib_TLB.exShowCheckBox;
			Position := 2;
		end;
		with (IUnknown(Add('Data 1')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index `A-Z`';
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		end;
		with (IUnknown(Add('Data 2')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index `AB` replace `A` with `<off -4>A</off>`';
			Def[EXGRIDLib_TLB.exCellSingleLine] := OleVariant(False);
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
			Def[EXGRIDLib_TLB.exCellHasRadioButton] := OleVariant(True);
		end;
		with (IUnknown(Add('Data 3')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index `CDC` replace `D` with `<b>D</b>`';
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		end;
	end;
	with Items do
	begin
		h := AddItem('ParentA');
		InsertItem(h,Null,'Child A');
		InsertItem(h,Null,'Child B');
		CellState[OleVariant(h),OleVariant(4)] := 1;
		CellBackColor[OleVariant(InsertItem(h,Null,'Child C')),OleVariant(5)] := $ff00;
		ExpandItem[h] := True;
		AddItem('Item A');
		h := AddItem('ParentB');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		CellBackColor[OleVariant(InsertItem(h,Null,'Child 3')),OleVariant(5)] := $ff00;
		CellState[OleVariant(h),OleVariant(5)] := 1;
		AddItem('Item B');
		AddItem('Item C');
		AddItem('Item D');
		ExpandItem[h] := True;
	end;
	EndUpdate();
	sFile := 'c:/temp/export.html';
	Export(OleVariant(sFile),'vis');
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('InternetExplorer.Application'))) as SHDocVw_TLB.ShellBrowserWindow) do
	begin
		Navigate2(sFile,Null,Null,Null,Null);
	end;
end
1075
Export Data in CSV format

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	BackColorAlternate := RGB(240,240,240);
	DrawGridLines := EXGRIDLib_TLB.exAllLines;
	HeaderAppearance := EXGRIDLib_TLB.Etched;
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(( ( value replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `' + 
	'[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( match' + 
	'itemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcoun' + 
	't + ` item(s)`) )))';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarShowCloseIfRequired) Or Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	FilterBarPromptType := EXGRIDLib_TLB.exFilterPromptContainsAny;
	with ConditionalFormats do
	begin
		Add('%0 like `*parent*`','parent').BackColor := $c0c0c0;
		with Add('%0 like `*child*`','child') do
		begin
			ForeColor := $8080ff;
			ApplyTo := EXGRIDLib_TLB.exFormatToColumns;
		end;
		with Add('%0 like `*B*`','b') do
		begin
			ForeColor := $ff0000;
			Bold := True;
			Italic := True;
			ApplyTo := EXGRIDLib_TLB.exFormatToColumns;
		end;
	end;
	with Columns do
	begin
		with (IUnknown(Add('Value')) as EXGRIDLib_TLB.Column) do
		begin
			Width := 128;
			HTMLCaption := '<b>VA</b><r>sko';
		end;
		with (IUnknown(Add('APos')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 apos ``';
			AllowSort := False;
			Def[EXGRIDLib_TLB.exCellBackColor] := OleVariant(15790320);
			Def[EXGRIDLib_TLB.exCellForeColor] := OleVariant(8421504);
			Def[EXGRIDLib_TLB.exHeaderForeColor] := Def[EXGRIDLib_TLB.exCellForeColor];
			Position := 0;
		end;
		with (IUnknown(Add('RPos')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 rpos ``';
			AllowSort := False;
			Position := 1;
		end;
		with (IUnknown(Add('Index')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index ``';
			DisplayFilterButton := True;
			FilterList := EXGRIDLib_TLB.exShowCheckBox;
			Position := 2;
		end;
		with (IUnknown(Add('Data 1')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index `A-Z`';
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		end;
		with (IUnknown(Add('Data 2')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index `AB` replace `A` with `<off -4>A</off>`';
			Def[EXGRIDLib_TLB.exCellSingleLine] := OleVariant(False);
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
			Def[EXGRIDLib_TLB.exCellHasRadioButton] := OleVariant(True);
		end;
		with (IUnknown(Add('Data 3')) as EXGRIDLib_TLB.Column) do
		begin
			FormatColumn := '0 index `CDC` replace `D` with `<b>D</b>`';
			Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		end;
	end;
	with Items do
	begin
		h := AddItem('ParentA');
		InsertItem(h,Null,'Child A');
		InsertItem(h,Null,'Child B');
		CellState[OleVariant(h),OleVariant(4)] := 1;
		CellBackColor[OleVariant(InsertItem(h,Null,'Child C')),OleVariant(5)] := $ff00;
		ExpandItem[h] := True;
		AddItem('Item A');
		h := AddItem('ParentB');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		CellBackColor[OleVariant(InsertItem(h,Null,'Child 3')),OleVariant(5)] := $ff00;
		CellState[OleVariant(h),OleVariant(5)] := 1;
		AddItem('Item B');
		AddItem('Item C');
		AddItem('Item D');
		ExpandItem[h] := True;
	end;
	EndUpdate();
	OutputDebugString( Export('','vis') );
end
1074
Is it possible to check multiple-items at once

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		bHasParent := FormatABC('value != 0',Items.ItemParent[Item],Null,Null);
		with Items do
		begin
			CellHasCheckBox[OleVariant(Item),OleVariant(0)] := False;
		end;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		FormatColumn := 'value + (%CS0 = 1 ? `<r><fgcolor=808080>(checked)` : ``)';
	end;
	HeaderVisible := True;
	SingleSel := False;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		hChild := InsertItem(h,Null,'Task 2');
		hChild := InsertItem(h,Null,'Task 3');
		ExpandItem[h] := True;
		LockedItemCount[EXGRIDLib_TLB.exTop] := 1;
		CellValue[OleVariant(LockedItem[EXGRIDLib_TLB.exTop,0]),OleVariant(0)] := '<c>Select multiple items and press the <b>SPACE</b> key';
	end;
	EndUpdate();
end
1073
How can I get the icon from the cell when using the Items.CellImages property (icon index)

// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.Grid1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with Grid1 do
	begin
		i := ItemFromPoint[-1,-1,c,hit];
		OutputDebugString( FormatABC('( 0x44 = ( value bitand 0x44 ) ) ? ( ( (value bitand 0xFFFF0000) bitshift 16 ) array B split `,` )  : `no image`',OleVariant(hit),Items.CellImages[OleVariant(i),OleVariant(c)],Null) );
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	Columns.Add('Default');
	with Items do
	begin
		CellImages[OleVariant(AddItem('Item 1')),OleVariant(0)] := '3,2,1';
		CellImages[OleVariant(AddItem('Item 2')),OleVariant(0)] := '2,3';
		CellImages[OleVariant(AddItem('Item 3')),OleVariant(0)] := '2,';
	end;
	EndUpdate();
end
1072
How can I get the icon from the cell when using the Items.CellImages property (icon position within the cell)

// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.Grid1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with Grid1 do
	begin
		i := ItemFromPoint[-1,-1,c,hit];
		OutputDebugString( FormatABC('( 0x44 = ( value bitand 0x44 ) ) ? 1 + ( (value bitand 0xFFFF0000) bitshift 16 ) : `no image`',OleVariant(hit),Null,Null) );
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	Columns.Add('Default');
	with Items do
	begin
		CellImages[OleVariant(AddItem('Item 1')),OleVariant(0)] := '3,2,1';
		CellImages[OleVariant(AddItem('Item 2')),OleVariant(0)] := '2,3';
		CellImages[OleVariant(AddItem('Item 3')),OleVariant(0)] := '2';
	end;
	EndUpdate();
end
1071
Is it possible to change the visual appearance of the position signs when user changes the column's position by drag and drop

with Grid1 do
begin
	BeginUpdate();
	HeaderAppearance := EXGRIDLib_TLB.Etched;
	with Columns do
	begin
		Add('Column 1');
		Add('Column 2');
		Add('Column 3');
	end;
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAEhABZEGACAADACAxRDgMQBQKAAzAJBIYhiG4cYCgMYxXDOCYXABCEYRXBIZQ7BKNIxjSJwFgmEgADKMA4SOKIZhrE4bBhGaQRUgyI43RhHUBzVI' + 
	'UcQvE6TZRHCQYHgkNIhDJIM7TPLkeSVJaTIRoKhJUogApQThTMgVRDEThkGoSa6soSoYTDBKybLrSLKagOT5YUDKUqSdKEZRpEq1YztWbaQoCUoqVRRVIWfbNd4JJa4a' + 
	'DhWpYdpeeY5R7bWLgBYVVABL7LLRsSxpHxPF6RXxaeI3GKsaS8G6ic6nPQMHj7I4NS5pUa6Rh2VYNSa8AAtETRYznOw4bTMXAjNIea5bAYIIR5HIoDzVbQcCQAHL9DBe' + 
	'EMIQEEISgGhMGZQmocgymoYRRCIEQ0G2HYBnEIBig4V4zCQGINnmagCECY43medZ6H2Pw/g+X5fnueh/h+R5+AKABfkMWgGgGYA4AICoCGCE5WA4CphACMgSD2IRIDIB' + 
	'ICmEd5YGCBpRjGBgegWIYIgWdgoGIRQsiKCZiAiJZ0gGQI4jUS4LECOAiBmDJflGfg2BSY4Al4OhGkOCJ2DgFJjGGfgqgiH5Ch4RhGkqOQmEOEpkFkHQYhJRYyESAokG' + 
	'KHhIhKIxJEmf4VGUeRGFmF5iBkchPhYJQ5GoYIZg6Ug6GoFYmkmNhuhulRGHKGoImefh0BUZ4JmYeoemeSZ2H6HQmgoBgXDqXwUAQgI=');
		Add(2,'CP:1 0 -36 0 0');
	end;
	Background[EXGRIDLib_TLB.exColumnsPositionSign] := $2000000;
	EndUpdate();
end
1070
How can I add a title column

with Grid1 do
begin
	BeginUpdate();
	HeaderHeight := 22;
	HeaderAppearance := EXGRIDLib_TLB.Etched;
	DrawGridLines := EXGRIDLib_TLB.exAllLines;
	with Columns do
	begin
		Add('Col 1');
		(IUnknown(Add('Col 2')) as EXGRIDLib_TLB.Column).FormatColumn := '1 pos ``';
		(IUnknown(Add('Col 3')) as EXGRIDLib_TLB.Column).FormatColumn := '1 pos `A-`';
		(IUnknown(Add('Col 4')) as EXGRIDLib_TLB.Column).FormatColumn := '1 pos `A-Z`';
		with (IUnknown(Add('Title')) as EXGRIDLib_TLB.Column) do
		begin
			ExpandColumns := '0,1,2,3';
			DisplayExpandButton := False;
			AllowSort := False;
			AllowDragging := False;
			Position := 0;
			HeaderAlignment := EXGRIDLib_TLB.CenterAlignment;
		end;
	end;
	ColumnAutoResize := False;
	with Items do
	begin
		AddItem('Item 1');
		AddItem('Item 2');
		AddItem('Item 3');
		AddItem('Item 4');
	end;
	EndUpdate();
	OutputDebugString( Export('',Null) );
end
1069
FilterBarCaption ALLUI Keyword ( sample 3, result, leaf )

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
procedure TForm1.Grid1AddGroupItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		with Items do
		begin
			ItemBackColor[Item] := $f0f0f0;
			val := CellValue[OleVariant(Item),OleVariant(GroupItem[Item])];
			CellState[OleVariant(Item),OleVariant(GroupItem[Item])] := Grid1.FormatABC('A = `Checked` ? 1 : 0',OleVariant(val),Null,Null);
		end;
	end
end;

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 rpos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(( ( allui replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `' + 
	'[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( match' + 
	'itemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + leafitemcount + ` result(s)` ) : (`<r><fgcolor=808080>`+ leafitemcount + ` ' + 
	'item(s)`) )))';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	AllowGroupBy := True;
	SortBarVisible := True;
	with Columns.Item[OleVariant(2)] do
	begin
		FormatColumn := '%CS2 ? `Checked` : `Unchecked`';
		SortOrder := EXGRIDLib_TLB.SortAscending;
	end;
	EndUpdate();
end
1068
A black portion is shown while I am using the BackColorAlternate with EBN colors. What can I do

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := True;
	DefaultItemHeight := 20;
	VisualAppearance.Add(1,'gBFLBCJwBAEHhEJAAEhIDhAxHAxg0HG0Mg4xGI3HMOig3GcJiYAf8jAEhhUnAAyhEqg8hk0oAsIjgAiAwmYxGA4mYzGwwkI0i0ooUnB0IBMIl1Dg8zmYyGolptPkI1mY' + 
	'1GAll9KoUslNIrVCqNQldShFUstXAVfrVcrlZtVhuFnsUHq1zoczoQGhFBkNpg6zbDykUkhsPHE2h85nc9n8xtVDtlex9Msd2p1YstVq9ux8HyMtzuFz1PsNTzQlv2hh' + 
	'WfkuqpeVuN0q+nvEooN5veSAGpkb/ACcZrvhU3w83nM/poxGuchGpoVBvWgg+8knA4WimnFxI45Er5XOlHMg/Q3XU33W4ew9Wyu11mchDagcO7zus8VDoNBBEIKBpMY6' + 
	'DqOQyokhA/IQIQmwMk4bIQFDcoO6LWgwhQkNcABwEyAB5GwWbet6cRQg3DENQ5D8QxADZvEkAB8nabsURGeBpFM3pwE2AEZRpDx/neZpOR3Dz9oO/r/wCMoZNTBQAQRJ' + 
	'SEwYg8HPGhEIoNCaEwq10gQ2WcRt7LcRxRFpuxUAEURQ3sczBEMgTTG8gN7HpOSEAEiQBAQZpmQ0DibPUFwbKcHwkhQoQtNQNzNEMbABOKDy/DMYQzHLeoPL0OTJSUd0' + 
	'pHcxTewk5zrIygIRPslz4lEngBKIAQivgASs/kLSBTlO00f8t0vGcgUbDlDRjXLCUNRERRvRgAHW2oAICA==');
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with (IUnknown(Columns.Add('Position')) as EXGRIDLib_TLB.Column) do
	begin
		FormatColumn := '1 rindex ``';
		Visible := False;
	end;
	with ConditionalFormats.Add('%C1 mod 2',Null) do
	begin
		BackColor := $1000000;
	end;
	with Items do
	begin
		AddItem('Item 1');
		AddItem('Item 2');
		AddItem('Item 3');
		AddItem('Item 4');
	end;
	EndUpdate();
end
1067
How can I specify alternate background colors for each root item, similar with BackColorAlternate

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('Default')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with (IUnknown(Columns.Add('Position')) as EXGRIDLib_TLB.Column) do
	begin
		FormatColumn := '( ( 1:=( ( 0:=(1 rpos '''') ) lfind `.`) ) < 0 ? =:0 : (=:0 left =:1) )';
		Visible := False;
	end;
	with ConditionalFormats.Add('%C1 mod 2',Null) do
	begin
		BackColor := $f0f0f0;
	end;
	with Items do
	begin
		h := AddItem('Root 1');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
		h := AddItem('Root 2');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		h := AddItem('Root 3');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
	end;
	EndUpdate();
end
1066
Is it possible to change the caption from a column without to remove the column and add it with the new caption
with Grid1 do
begin
	(IUnknown(Columns.Add('ColumnName')) as EXGRIDLib_TLB.Column).Caption := 'NewName';
	(IUnknown(Columns.Add('ColumnName')) as EXGRIDLib_TLB.Column).HTMLCaption := '<b>New</b>Name';
end
1065
FilterBarCaption ALL Keyword ( sample 2, result )

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(( ( all replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `[<' + 
	's>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( matchit' + 
	'emcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount ' + 
	'+ ` item(s)`) )))';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	Columns.Item[OleVariant(2)].Filter := 1;
	ApplyFilter();
	EndUpdate();
end
1064
FilterBarCaption ALL Keyword ( sample 1 )

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := 'all';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	Columns.Item[OleVariant(2)].Filter := 1;
	ApplyFilter();
	EndUpdate();
end
1063
FilterBarCaption ALLUI Keyword ( sample 2, result )

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(( ( allui replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `' + 
	'[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( match' + 
	'itemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcoun' + 
	't + ` item(s)`) )))';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	Columns.Item[OleVariant(2)].Filter := 1;
	ApplyFilter();
	EndUpdate();
end
1062
FilterBarCaption ALLUI Keyword ( sample 1 )

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := 'allui';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	Columns.Item[OleVariant(2)].Filter := 1;
	ApplyFilter();
	EndUpdate();
end
1061
FilterBarCaption AVAILABLE Keyword ( sample 2, result )

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(( ( value replace `[` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>` ) + ` ` + ( avai' + 
	'lable replace `[` with `<bgcolor=C0C0C0><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>` replace `<s>` with ``' + 
	' replace `</s>` with `` ) + `<fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount ' + 
	'+ 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount + ` item(s)`) )))';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	Columns.Item[OleVariant(2)].Filter := 1;
	ApplyFilter();
	EndUpdate();
end
1060
FilterBarCaption AVAILABLE Keyword ( sample 1 )

// AddItem event - Occurs after a new Item has been inserted to Items collection.
procedure TForm1.Grid1AddItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		i := FormatABC('value + 1',Items.ItemToIndex[Item],Null,Null);
		Items.CellImage[OleVariant(Item),OleVariant(3)] := i;
	end
end;

with Grid1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Image')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterType := EXGRIDLib_TLB.exImage;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		h := AddItem('Item B');
		CellValue[OleVariant(h),OleVariant(1)] := 'Sub-Item B';
		CellState[OleVariant(h),OleVariant(2)] := 1;
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080> ` + value + ` </fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := 'value + ` ` + available';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	Columns.Item[OleVariant(2)].Filter := 1;
	ApplyFilter();
	EndUpdate();
end
1059
Is it possible to somehow highlight the column's name different than its filter value in the control's filter bar ( sample 3, results )

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		CellValue[OleVariant(AddItem('Item B')),OleVariant(1)] := 'Sub-Item B';
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080>` + value + `</fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := '(`<b>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ' + 
	'` result(s)` ) : (`<fgcolor=808080>`+ itemcount + ` item(s)`) )) replace `[` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace' + 
	' `]` with ` </b></bgcolor></fgcolor>`';
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarToggle;
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	with Columns.Item[OleVariant(1)] do
	begin
		FilterType := EXGRIDLib_TLB.exPattern;
		Filter := '*B';
	end;
	ApplyFilter();
	EndUpdate();
end
1058
Is it possible to somehow highlight the column's name different than its filter value in the control's filter bar ( sample 2 )

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		CellValue[OleVariant(AddItem('Item B')),OleVariant(1)] := 'Sub-Item B';
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080>` + value + `</fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := 'value replace `[` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>`';
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarToggle;
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	with Columns.Item[OleVariant(1)] do
	begin
		FilterType := EXGRIDLib_TLB.exPattern;
		Filter := '*B';
	end;
	ApplyFilter();
	EndUpdate();
end
1057
Is it possible to somehow highlight the column's name different than its filter value in the control's filter bar ( sample 1 )

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Col-1')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Col-2')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		CellValue[OleVariant(AddItem('Item A')),OleVariant(1)] := 'Sub-Item A';
		CellValue[OleVariant(AddItem('Item B')),OleVariant(1)] := 'Sub-Item B';
		CellValue[OleVariant(AddItem('Item C')),OleVariant(1)] := 'Sub-Item C';
	end;
	Description[EXGRIDLib_TLB.exFilterBarAnd] := FormatABC('`<fgcolor=808080>` + value + `</fgcolor>`',OleVariant(Description[EXGRIDLib_TLB.exFilterBarAnd]),Null,Null);
	FilterBarCaption := 'value replace `[` with `<fgcolor=808080>[` replace `]` with `]</fgcolor>`';
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarToggle;
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	with Columns.Item[OleVariant(1)] do
	begin
		FilterType := EXGRIDLib_TLB.exPattern;
		Filter := '*B';
	end;
	ApplyFilter();
	EndUpdate();
end
1056
Is it possible to automatically displays the control's filter label to the right

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarCaption := '`<r>` + value';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarShowCloseOnRight) Or Integer(EXGRIDLib_TLB.exFilterBarToggle);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1055
How can I get the number of results/items being shown in the control's filter bar (sample 4)

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowFocusItem) Or Integer(EXGRIDLib_TLB.exShowCheckBox) Or Integer(EXGRIDLib_TLB.exSortItemsAsc);
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	FilterBarPrompt := FormatABC('`<b>` + value',OleVariant(FilterBarPrompt),Null,Null);
	FilterBarCaption := '`<b><r>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `<br>` : `` ) + `<r>` + abs(matchitemcount +' + 
	' 1) + ` result(s)` ) : (`<fgcolor=808080>`+ itemcount + ` item(s)`) )';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarShowCloseOnRight) Or Integer(EXGRIDLib_TLB.exFilterBarShowCloseIfRequired) Or Integer(EXGRIDLib_TLB.exFilterBarCaptionVisible) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	EndUpdate();
end
1054
How can I get the number of results being shown in the control's filter bar (sample 3)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	FilterBarCaption := '`<b><r>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `<br>` : `` ) + `<r>` + abs(matchitemcount +' + 
	' 1) + ` result(s)` ) : ``)';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarCaptionVisible) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1053
How can I get the number of results being shown in the control's filter bar (sample 2, compact)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	FilterBarCaption := '`<b><r>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? `<off -4> ` + abs(matchitemcount + 1) + ` result(s)` : ``)';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarCaptionVisible) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1052
How can I get the number of results being shown in the control's filter bar (sample 1)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	FilterBarCaption := '`<b>` + value + `</b><r><fgcolor=808080>` + ( matchitemcount < 0 ? abs(matchitemcount + 1) + ` result(s)` : ``)';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCaptionVisible) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1051
FilterBarCaption Predefined Keywords

// AfterExpandItem event - Fired after an item is expanded (collapsed).
procedure TForm1.Grid1AfterExpandItem(ASender: TObject; Item : HITEM);
begin
	with Grid1 do
	begin
		Refresh();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.CheckValueType;
			Option[EXGRIDLib_TLB.exCheckValue2] := OleVariant(1);
		end;
		DisplayFilterButton := True;
		DisplayFilterPattern := False;
		FilterType := EXGRIDLib_TLB.exCheck;
	end;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		h := AddItem('Item B');
		CellState[OleVariant(InsertItem(h,Null,'Sub-Item B1')),OleVariant(1)] := 1;
		InsertItem(h,Null,'Sub-Item B2');
		ExpandItem[h] := True;
		AddItem('Item C');
	end;
	FilterInclude := EXGRIDLib_TLB.exItemsWithChilds;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	FilterBarCaption := '`<fgcolor=0000FF><i>value/current</i></fgcolor>: <fgcolor=808080>` + value + `</fgcolor>` + `<br><fgcolor=0000FF><i>available</i' + 
	'></fgcolor>: ` + available + `<br><fgcolor=0000FF><i>allui</i></fgcolor>: ` + allui + `<br><fgcolor=0000FF><i>all</i></fgcolor>:' + 
	' ` + all + `<br><fgcolor=0000FF><i>itemcount</i></fgcolor>: <fgcolor=808080>` + itemcount + `</fgcolor>`+ `<br><fgcolor=0000FF><' + 
	'i>visibleitemcount</i></fgcolor>: <fgcolor=808080>` + visibleitemcount + `</fgcolor>`+ `<br><fgcolor=0000FF><i>matchitemcount</i' + 
	'></fgcolor>: <fgcolor=808080>` + matchitemcount + `</fgcolor>`+ `<br><fgcolor=0000FF><i>promptpattern</i></fgcolor>: <fgcolor=80' + 
	'8080>` + promptpattern + `</fgcolor>`+ `<br><fgcolor=0000FF><i>leafitemcount</i></fgcolor>: <fgcolor=808080>` + leafitemcount + ' + 
	'`</fgcolor>`';
	FilterBarPromptPattern := 'B';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCaptionVisible) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1050
I am using filter prompt feature, and also column's filter, just wondering if possible to compact displaying the filter bar so it won't show on multiple lines

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarFont := (IUnknown(Font) as stdole_TLB.StdFont);
	FilterBarCaption := '`<r><i><fgcolor=808080><upline><solidline><sha ;;0>` + value';
	FilterBarPromptPattern := 'B';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1049
Just wondering if it is possible to show the filter bar's close button on the right ( sample 2 )

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarShowCloseOnRight) Or Integer(EXGRIDLib_TLB.exFilterBarToggle) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	FilterBarPrompt := FormatABC('`<r>` + value',OleVariant(FilterBarPrompt),Null,Null);
	EndUpdate();
end
1048
Just wondering if it is possible to show the filter bar's close button on the right ( sample 1 )

with Grid1 do
begin
	BeginUpdate();
	RightToLeft := True;
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarToggle) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	EndUpdate();
end
1047
How can I change the visual appearance of the filter bar's close button (EBN)

with Grid1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAEhABHQDg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLOg7IJj' + 
	'yI4/SJAYCydKAWhxIaZKJHCZoEDaTAADCNVAQp6MEIJVbVEI0e79OgBLp/Z7kECIJJAaRjHQdJxGLA8EhtCQhCZteK6SgMKJYXhWQYRXI1JwvMBrWrdQjiOYELQtMKmS' + 
	'ZNLYGG4dR5SVJbcYhSYsRRFMoyDIOXYDLKsdYqSpXIThObEGgaPqJYjsUjCMKnR7HVIURrBPC9TBPE69ZgmC6ucKPX51ShKFaBWDZcwFAS+UBuYCAILiEAQGZ1XT8ORO' + 
	'icbgJgSTJRlCaZeDsHY7QGR4xkSYp3CaExZAQMgalQYAwjCAAfBANxcA2TgKAUOpDCGFhKg0RpXCwCwDHQHQHEyAIkCkOhbFOGA8A8DohBgRg9AccZcn8EpEjMLI2C2D' + 
	'YxAgQgvAIUIVkoAAPBQDJlECTZ3CCYwDACQwUA8A5MCAWAWDiQi4l8aQOEgLJuBgBgDmYFAzEoIoIl0WALgKYJbBABADAAHgHg8VAMmqCQQDMXABAATYwTmNwBDATJXA' + 
	'iAgjHmNQ5lgQ5QEQEQMmcWg/GwD5ylyNw2gMcJcjsBgBgOQQDDhRpVAMMwnDBFw1B0Ax8D0DxOmmJJIGQTY5hGMAwkwM4CAYLZAmAOJnAqAojiIGg6iieYkmeAYOHaKJ' + 
	'DCyCwjH6AoggsQpQliAJLhgaJ0CESBTnyDwjk+cg4g4P5IHIHJ+BWRRzlYWAxiOUxihsY4KjKLJRGqC44FCegkkkM58iAKAPnIWIWD8SRSFSfQnkmewUhYP4GiGKJ7G0' + 
	'TIbCSUoggqUo0lAQ4LnEcBcD8Coiiif4nE+eAAn2HpOkcFJqi4T5SkyMw/kqQown8IBIBOdA+A+DJrBqVxXEqYo4lCApLhGHBnD8S4ymyfxmg+cwQkQP5egOUZIWoEAk' + 
	'jIeIPBMBJBD+TBjBifwvkuc58hQJQPmFrYykkchclSApKjGOBuD+TRDFCfw3mmIxNi8FxFlOXhVC4aYDFyPgvg2YBcBcLZGCGCJ0DSLRzGSWQ/lmY5+mEP5gmMDBZRSM' + 
	'RsFsOxMhMJJ/DsTpTnwaQaE+N5ojuNhdEYNI5C4TZJO1GRDmCaxnA2Yx4n8IpIjOTBQBQC5TgyYw7gUYRYikC0BYRwsDQBoB8eA6Q2hsE0BUXgywZtYCyHMKwnxSAhAQ' + 
	'HkIQhRrBaDsCwA4ERiB2EWAIYIXhhiVEgAEUYwwYjyASLge4FhHgRDkM8OQih0jWPkGgBBAQ');
	end;
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarToggle) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	Background[EXGRIDLib_TLB.exFooterFilterBarButton] := $1000000;
	EndUpdate();
end
1046
How can I change the visual appearance of the filter bar's close button (solid)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarPromptVisible;
	Background[EXGRIDLib_TLB.exFooterFilterBarButton] := $ff;
	EndUpdate();
end
1045
Is it possible to prevent definitely showing the filter bar's close button

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarPromptVisible;
	Background[EXGRIDLib_TLB.exFooterFilterBarButton] := $ffffffff;
	EndUpdate();
end
1044
Is it possible to show the close button only if there is a filter applied

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarShowCloseIfRequired) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	EndUpdate();
end
1043
The control's filter bar is not closed once I click the close button (toggle)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
		LockedItemCount[EXGRIDLib_TLB.exBottom] := 1;
		h := LockedItem[EXGRIDLib_TLB.exBottom,0];
		ItemDivider[h] := 0;
		CellValue[OleVariant(h),OleVariant(0)] := '<c><fgcolor=808080>Press the CTRL + F to turn on/off the control''s filter bar. ALT + Up/Down moves the focus.';
		CellValueFormat[OleVariant(h),OleVariant(0)] := EXGRIDLib_TLB.exHTML;
	end;
	FilterBarCaption := '`<r><fgcolor=808080>` + value';
	FilterBarPromptPattern := 'B';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarToggle) Or Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1042
How can I display the control's filter on a single line

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarCaption := 'len(value) ? `filter for: <fgcolor 808080>` + value  : `<fgcolor 808080>no filter`';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1041
How can I display the control's filter on a single line (prompt-combined)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarCaption := '`<r>` + value';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarCompact) Or Integer(EXGRIDLib_TLB.exFilterBarSingleLine) Or Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item A|Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1040
How can I get the number of results after a filter is applied

// Click event - Occurs when the user presses and then releases the left mouse button over the grid control.
procedure TForm1.Grid1Click(ASender: TObject; );
begin
	with Grid1 do
	begin
		ClearFilter();
	end
end;

// FilterChange event - Occurs when filter was changed.
procedure TForm1.Grid1FilterChange(ASender: TObject; );
begin
	with Grid1 do
	begin
		OutputDebugString( 'Items.MatchItemCount' );
		OutputDebugString( Items.MatchItemCount );
		OutputDebugString( FormatABC('value < 0 ? `filter applied: ` + abs(value + 1) + ` result(s)` : `no filter`',Items.MatchItemCount,Null,Null) );
	end
end;

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarPromptVisible;
	FilterBarPromptPattern := 'Item';
	EndUpdate();
end
1039
How can I programmatically clear the control's filter
// Click event - Occurs when the user presses and then releases the left mouse button over the grid control.
procedure TForm1.Grid1Click(ASender: TObject; );
begin
	with Grid1 do
	begin
		ClearFilter();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarPromptVisible;
	FilterBarPromptPattern := 'B';
	EndUpdate();
end
1038
Is it possible to prevent closing the control's filter bar, so it is always shown (prompt-combined)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptPattern := 'B';
	FilterBarPromptVisible := Integer(EXGRIDLib_TLB.exFilterBarVisible) Or Integer(EXGRIDLib_TLB.exFilterBarPromptVisible);
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1037
Is it possible to prevent closing the control's filter bar, so it is always shown (prompt)

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarPromptVisible;
	FilterBarPromptPattern := 'B';
	EndUpdate();
end
1036
Is it possible to prevent closing the control's filter bar, so it is always shown

with Grid1 do
begin
	BeginUpdate();
	(IUnknown(Columns.Add('Item')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	with (IUnknown(Columns.Add('Pos')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowSort := False;
		Width := 32;
		FormatColumn := '1 apos ``';
		Position := 0;
	end;
	with Items do
	begin
		AddItem('Item A');
		AddItem('Item B');
		AddItem('Item C');
	end;
	FilterBarCaption := 'len(value) = 0 ? `<fgcolor=808080>no filter` : value';
	FilterBarPromptVisible := EXGRIDLib_TLB.exFilterBarVisible;
	with Columns.Item[OleVariant(0)] do
	begin
		FilterType := EXGRIDLib_TLB.exFilter;
		Filter := 'Item B';
	end;
	ApplyFilter();
	EndUpdate();
end
1035
How can I change the visual appearance of the +/- buttons, open/close glyphs as current visual theme (method 4)

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	VisualDesign := 'gBFLBWIgBAEHhEJAEGg6VAkHeLpgwChAOhULB8XAUUg8MAAREEHGMcgRCJ0ei8dhABDEcQAAYAQGKIYBkAKBQAGaAoDDMOQwQwAAxjGKEEwsACEIrjKCRShyCYZRhGcT' + 
	'SBCIZBqEqSZLiEZRQiiCYsS5GQBRWAkEwiBiEQTjea5CgOIAFS7LIqjRQEBxhIaZYIGaiQADENo9TxIMZAfBIHShK6NJABCCSQKkYx0HScRijDIEFwGIQmbKiej4DCiC' + 
	'QQW7OYYRVCNMQSfa8HivJyrcamfp/YBgOBYHb1eLVPR5LwfPCGUw1P6PLxkORZHimK4tSLHV7xVpMIwZFafIQhCCoHomS5NU7UNR0TQUFx9FaGX7rDDsGwLAJ6XRgF4b' + 
	'g2VpnHePpenAN4bH2GwHFmApSjEGBLnWOpRGOTBZHOegrE6BxPiWVJqCweQrn0LgJAWJBjwgaw1gKO5HmWch5h+fovF+G5bmich4BgfZkB8dynRUVYqiUR5rnmex/F6N' + 
	'4tn2AJfnebZ3DEXw3HWXgzAyIwgicKJKBKEIhCeCgiHyHYFEmSAFmqBghFIdgSCeIJygYDAyAgJx6AoIINAMOJNCgCZCGoGoLmMCI+CwJoihMNglCCIhzFCUg0EmMhgh' + 
	'WDBkAiQg9CUY4jEYN4Jk2IxklYJoJHIUg+CSZJSESFwkkkGI+FOFIJEIRhPhMCRJCSVoRrSBhiDgTZjHYT4PEkYhwhgJYm0SaIaiaSYuE+GQNlmCIBGCJxjhiZQ5AkMh' + 
	'Ag6ExJCkPhPguaAiFYUAlAkKZ0g6HoOEmWR/GHcA4m0OwIlIJIHCRgQshGJhpjoaocieaZiC6GAimkUgehIOwnGYGYIGkah6jaE4rg6SpCjKK5rEOMYlGIGIihKOgglo' + 
	'Foqj6L5aGaBo6CkGIkAQjiPpCAAaJILCTJQlKPACDaXJgmSaJsnCdJ4nygKEoijKQpSmKcqCpKoqysK0rivLAsSyLMtC1LYty4Lkui7LwvS+L8wDBMIwzEMUxjHMgyTK' + 
	'MszDNM4zzQNE0jTNQ1TWNc2DZNo2zcN03jfOA4TiOM5DlOY5zoOk6jrOw7TuO88DxPI8z0PU9j3Pg+T6Ps/D9P4/0AQFAkDQRBUGQdCEJQpC0MQ1DkPRBEUSRNFEVBhF' + 
	'kXRhGQ9D6Dxfh+W5gGGd4QH2XQjCmDpFFaKoVB+D5Xmed5+H8YAHnIAh9EwV5Fl0d4MkMKJICmSgygSJAoEmMUCIPgnDCCIOQFYCxJjwFoCcA4kxoF+AIJkAgExegDEg' + 
	'EYQInAzCUAIOEGgfxiiRDYF1Q4EQ2BSCaEQYwbAiKREMpRSymFNDIAkAxT6oVRgSA2qdVKq1WqvVirMZQUhSCnBUMoIgoQRgnGSIQUgkg1hIHYAkAYMROAmHiLsE4xxS' + 
	'CxBwEwCQ0wmDdBsE0GYXBtg2CSPMFIuwYiQBYBQeAcwOCnBCCZgw0g0glBONAQgqQThCGgPQGoBQfiRGmOEZIPAXjsBoPAO4HRThhA0EQSA5BAgaCKJIGg3QdhOCmNUB' + 
	'oQAijTCIF0FwQxpCHDIPAYYMQGgtCmFcaQtRAjZCyFYSojQ2B2BoKwIYFApBXEIBsIQ1QsAWAWEwaA1xCgjAoIAQBAQ=';
	Columns.Add('Column');
	with Items do
	begin
		h := AddItem('Root 1');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
		h := AddItem('Root 2');
		InsertItem(h,Null,'Child');
	end;
	EndUpdate();
end
1034
How can I change the visual appearance of the +/- buttons, open/close glyphs as current visual theme (method 3)

with Grid1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(3,'gBFLBCJwBAEHhEJAAEhABDwCg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSB' + 
	'cQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfD' + 
	'xXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4l' + 
	'lWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJegef4zluaJ3nqPJeCYH4BAeX5TDLBpVGqKRRnwf4flefZtHsX54BYAR/F+EwVnUd5eAMMJKDIChygyIQpAoEh4iIJ5JlgX' + 
	'IcgCXpIGoFwnGEQh6BEKBgmMIICHgIJCAiUAzgyUoAhwJohkiRgygwYpiGoKwzGIcgKCkNQNCMRIbCYCRYk4QoMiOchWDwNBjhiJJaDYTRiGiFwlCQAhOE8JBJHITIRg' + 
	'wZRZFCFCZBkOIUhKTRpCWAwgGYQ4El4NxlBifIWCcCYCFoaoMGaKYyG6GxlBmGJdhkCAWBIeA5g4U4QhMJAImkPIShRVxGgQJRlCIUISh+SJpnCZIeBgFgiHgO4OlOMI' + 
	'NCISByECDQikkGhuh2JwpmqBogCKaYiC6FwhmkQ4yHgYgYiaHopiuaRakCbIsisSpGjYOwaHYKYMCkK5CA2IxrCwCwFigaJrkLTI6lcdANAEgIA=');
		Add(1,'CP:3 -2 -2 2 2');
		Add(4,'gBFLBCJwBAEHhEJAAEhABEICg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSB' + 
	'cQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfD' + 
	'xXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4l' + 
	'lWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJeg8X4rluaZ3niGB+AQHx/EyShjjEVYqiUR5rnmex/GAB5+AIf4gEeXJFHyXZ3gCTAygyAociMKBKEKBIeCiCZyHYFAnCEe' + 
	'Bkh+BghFgRIegOCgYCySAgh4CAkgINAMmMNIgCcCYjn4LoLmMCJGDKC5ijIagoDMYhCAoJg1A0IxEhsJgJFiThChCY5yFYPA0GOGIYloNhNGIaIXCUJACE4TwkEkchOF' + 
	'SFYlFkXhUCUCQZEYTglCSMxaEkYJIBmFJhDeDZZEYPwlgmQhghaGqVDoa4bGaeY6FGGZNlmFIBGEJ4jhiZQ5AkMhAg6E5JCkRoGCUSQ6B6CYiSCBIOh+DhJmmARiWQOJ' + 
	'tDsCJSCSBwkXSLIRicaZ6HqIIomoIguhwIpphIHoWDsJ4mCGChpmqOpGheLIOkqUo2iya4DjGJxihiQoSj4IJaDaMpCjCWoGg6PgpBiQ4tHcQJQBAgI=');
		Add(2,'CP:4 -2 -2 2 2');
	end;
	LinesAtRoot := EXGRIDLib_TLB.exGroupLinesAtRoot;
	HasButtons := EXGRIDLib_TLB.exCustom;
	HasButtonsCustom[False] := 16777216;
	HasButtonsCustom[True] := 33554432;
	Columns.Add('Column');
	with Items do
	begin
		h := AddItem('Root 1');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
		h := AddItem('Root 2');
		InsertItem(h,Null,'Child');
	end;
	EndUpdate();
end
1033
How can I change the visual appearance of the +/- buttons, open/close glyphs as current visual theme (method 2)

with Grid1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(1,'XP:TREEVIEW 2 1');
		Add(2,'XP:TREEVIEW 2 2');
	end;
	Background[EXGRIDLib_TLB.exTreeGlyphOpen] := $1000000;
	Background[EXGRIDLib_TLB.exTreeGlyphClose] := $2000000;
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	Columns.Add('Column');
	with Items do
	begin
		h := AddItem('Root 1');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
		h := AddItem('Root 2');
		InsertItem(h,Null,'Child');
	end;
	EndUpdate();
end
1032
How can I find if the control is running in DPI mode
with Grid1 do
begin
	OutputDebugString( FormatABC('dpi = 1 ? `normal/stretch mode` : `dpi mode`',Null,Null,Null) );
end
1031
How can I change the visual appearance of the +/- buttons (method 1)

with Grid1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAEhABDwCg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSB' + 
	'cQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfD' + 
	'xXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4l' + 
	'lWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJegef4zluaJ3nqPJeCYH4BAeX5TDLBpVGqKRRnwf4flefZtHsX54BYAR/F+EwVnUd5eAMMJKDIChygyIQpAoEh4iIJ5JlgX' + 
	'IcgCXpIGoFwnGEQh6BEKBgmMIICHgIJCAiUAzgyUoAhwJohkiRgygwYpiGoKwzGIcgKCkNQNCMRIbCYCRYk4QoMiOchWDwNBjhiJJaDYTRiGiFwlCQAhOE8JBJHITIRg' + 
	'wZRZFCFCZBkOIUhKTRpCWAwgGYQ4El4NxlBifIWCcCYCFoaoMGaKYyG6GxlBmGJdhkCAWBIeA5g4U4QhMJAImkPIShRVxGgQJRlCIUISh+SJpnCZIeBgFgiHgO4OlOMI' + 
	'NCISByECDQikkGhuh2JwpmqBogCKaYiC6FwhmkQ4yHgYgYiaHopiuaRakCbIsisSpGjYOwaHYKYMCkK5CA2IxrCwCwFigaJrkLTI6lcdANAEgIA=');
		Add(2,'gBFLBCJwBAEHhEJAAEhABEICg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSB' + 
	'cQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfD' + 
	'xXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4l' + 
	'lWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJeg8X4rluaZ3niGB+AQHx/EyShjjEVYqiUR5rnmex/GAB5+AIf4gEeXJFHyXZ3gCTAygyAociMKBKEKBIeCiCZyHYFAnCEe' + 
	'Bkh+BghFgRIegOCgYCySAgh4CAkgINAMmMNIgCcCYjn4LoLmMCJGDKC5ijIagoDMYhCAoJg1A0IxEhsJgJFiThChCY5yFYPA0GOGIYloNhNGIaIXCUJACE4TwkEkchOF' + 
	'SFYlFkXhUCUCQZEYTglCSMxaEkYJIBmFJhDeDZZEYPwlgmQhghaGqVDoa4bGaeY6FGGZNlmFIBGEJ4jhiZQ5AkMhAg6E5JCkRoGCUSQ6B6CYiSCBIOh+DhJmmARiWQOJ' + 
	'tDsCJSCSBwkXSLIRicaZ6HqIIomoIguhwIpphIHoWDsJ4mCGChpmqOpGheLIOkqUo2iya4DjGJxihiQoSj4IJaDaMpCjCWoGg6PgpBiQ4tHcQJQBAgI=');
	end;
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	Background[EXGRIDLib_TLB.exTreeGlyphOpen] := $1000000;
	Background[EXGRIDLib_TLB.exTreeGlyphClose] := $2000000;
	Columns.Add('Column');
	with Items do
	begin
		h := AddItem('Root 1');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
		h := AddItem('Root 2');
		InsertItem(h,Null,'Child');
	end;
	EndUpdate();
end
1030
I am using single selection, the question is if possible to select an item only when the user releases the mouse, as currently it selects the item as soon as the user clicks it
// SelectionChanged event - Fired after a new item has been selected.
procedure TForm1.Grid1SelectionChanged(ASender: TObject; );
begin
	with Grid1 do
	begin
		OutputDebugString( 'SelectionChanged' );
	end
end;

with Grid1 do
begin
	BeginUpdate();
	FreezeEvents(True);
	SingleSel := True;
	SelectOnRelease := True;
	(IUnknown(Columns.Add('Column')) as EXGRIDLib_TLB.Column).FormatColumn := '1 apos `A-Z`';
	with Items do
	begin
		AddItem('');
		SelectItem[AddItem('')] := True;
		AddItem('');
	end;
	FreezeEvents(False);
	EndUpdate();
end
1029
Is it possible to select nothing
// SelectionChanged event - Fired after a new item has been selected.
procedure TForm1.Grid1SelectionChanged(ASender: TObject; );
begin
	with Grid1 do
	begin
		OutputDebugString( 'SelectionChanged' );
	end
end;

with Grid1 do
begin
	BeginUpdate();
	FreezeEvents(True);
	AllowSelectNothing := True;
	(IUnknown(Columns.Add('Column')) as EXGRIDLib_TLB.Column).FormatColumn := '1 apos `A-Z`';
	with Items do
	begin
		AddItem('');
		SelectItem[AddItem('')] := True;
		AddItem('');
	end;
	FreezeEvents(False);
	EndUpdate();
end
1028
How can I specify the color for control's selection when it loses the focus

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('')) as EXGRIDLib_TLB.Column) do
	begin
		AllowSizing := False;
		AllowDragging := False;
		AllowSort := False;
		Width := 24;
		Def[EXGRIDLib_TLB.exCellHasButton] := OleVariant(True);
	end;
	(IUnknown(Columns.Add('Column')) as EXGRIDLib_TLB.Column).FormatColumn := '1 apos `A-Z`';
	with Items do
	begin
		AddItem('');
		SelectItem[AddItem('')] := True;
		AddItem('');
	end;
	Background[EXGRIDLib_TLB.exSelBackColorHide] := $c4c4c4;
	Background[EXGRIDLib_TLB.exSelForeColorHide] := $10000;
	EndUpdate();
end
1027
How can I change the background color for checked items (EBN color, frame)

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
	with Grid1 do
	begin
		Refresh();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	SelBackMode := EXGRIDLib_TLB.exTransparent;
	DefaultItemHeight := 22;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with VisualAppearance do
	begin
		Add(2,'gBFLBCJwBAEHhEJAAEhABUkIQAAYAQGKIcBiAKBQAGYBIJDEMQ3DjAUBjMK4ZwTC4AIQjCK4JDKHYJRpHEZgLBMJAAGIZYhhUYRUiYMkiJBGGDIDiGGI2SJAcbTVIEcx' + 
	'9EyUJSgSTJOjCMokTTIU4TTLYASbJafJJhWSaAiyMouDIOMg1BDNIw/Hika6jOgKUisNJXRzWIBTbDlOQ3JqnbCjOQRSrQBoNDAMAiiaKlbwJPK9RoieQXfwUAJrXJcF' + 
	'qXFSLVxNBKAQEBA=');
		Add(1,'CP:2 1 1 -1 -1');
	end;
	with ConditionalFormats.Add('%CS0 = 1',Null) do
	begin
		BackColor := $1000000;
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1026
How can I change the caption of the checked items (sample 2)

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
		Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		FormatColumn := '%CS0 = 1 ? `<bgcolor=000000><fgcolor=FFFFFF> ` + value + ` </fgcolor></bgcolor>` : value';
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1025
How can I change the caption of the checked items (sample 1)

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
		Def[EXGRIDLib_TLB.exCellValueFormat] := OleVariant(1);
		FormatColumn := 'value + (%CS0 = 1 ? `<r><fgcolor=808080>(checked)` : ``)';
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1024
How can I change the font for the checked items

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
	with Grid1 do
	begin
		Refresh();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	DefaultItemHeight := 22;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with ConditionalFormats.Add('%CS0 = 1',Null) do
	begin
		f := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('StdFont'))) as stdole_TLB.StdFont);
		with f do
		begin
			Name := Grid1.Font.Name;
			Size := 12;
		end;
		Font := (IUnknown(f) as stdole_TLB.StdFont);
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1023
How can I bold the checked items

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
	with Grid1 do
	begin
		Refresh();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with ConditionalFormats.Add('%CS0 = 1',Null) do
	begin
		Bold := True;
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1022
How can I change the foreground color for checked items

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
	with Grid1 do
	begin
		Refresh();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	SelBackMode := EXGRIDLib_TLB.exTransparent;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with ConditionalFormats.Add('%CS0 = 1',Null) do
	begin
		ForeColor := $8080ff;
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1021
How can I change the background color for checked items (solid color)

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
	with Grid1 do
	begin
		Refresh();
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	SelBackMode := EXGRIDLib_TLB.exTransparent;
	with (IUnknown(Columns.Add('Tasks')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with ConditionalFormats.Add('%CS0 = 1',Null) do
	begin
		BackColor := $8080ff;
	end;
	HeaderVisible := True;
	with Items do
	begin
		h := AddItem('Project');
		hChild := InsertItem(h,Null,'Task 1');
		SelectItem[hChild] := True;
		hChild := InsertItem(h,Null,'Task 2');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		hChild := InsertItem(h,Null,'Task 3');
		CellState[OleVariant(hChild),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1020
How can I export the cell's state as well

with Grid1 do
begin
	BeginUpdate();
	with Columns do
	begin
		(IUnknown(Add('C1')) as EXGRIDLib_TLB.Column).Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		(IUnknown(Add('C2')) as EXGRIDLib_TLB.Column).FormatColumn := '1 index `A-Z`';
		(IUnknown(Add('C3')) as EXGRIDLib_TLB.Column).FormatColumn := '100 index ``';
	end;
	with Items do
	begin
		AddItem('Item 1');
		CellState[OleVariant(AddItem('Item 2')),Null] := 1;
		CellState[OleVariant(AddItem('Item 3')),Null] := 1;
	end;
	EndUpdate();
	OutputDebugString( 'Export CSV Items including Check-State:' );
	BeginUpdate();
	with (IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column) do
	begin
		Position := 0;
		FormatColumn := '%CS0';
	end;
	OutputDebugString( Export('',Null) );
	Columns.Remove('Check');
	EndUpdate();
end
1019
Is it possible to customize the editor selection colour of the built in text editor, from standard blue to black

with Grid1 do
begin
	BeginUpdate();
	SelBackColor := RGB(0,0,0);
	SelForeColor := RGB(255,255,255);
	with (IUnknown(Columns.Add('Edit')) as EXGRIDLib_TLB.Column).Editor do
	begin
		EditType := EXGRIDLib_TLB.MaskType;
		Mask := ';;;rich';
	end;
	with Items do
	begin
		AddItem('');
		AddItem('Just a text');
		AddItem('');
	end;
	EndUpdate();
end
1018
Is it possible to customize the editor selection colour of the built in dropdown editor, from standard blue to black

with Grid1 do
begin
	BeginUpdate();
	SelBackColor := RGB(0,0,0);
	SelForeColor := RGB(255,255,255);
	with (IUnknown(Columns.Add('DropDown')) as EXGRIDLib_TLB.Column).Editor do
	begin
		AddItem(1,'This is just the first item',Null);
		AddItem(2,'This is just the second item',Null);
		AddItem(3,'This is just the third item',Null);
		EditType := EXGRIDLib_TLB.DropDownType;
		Mask := ';;;rich';
	end;
	with Items do
	begin
		AddItem('');
		AddItem('Just a text');
		AddItem('');
	end;
	EndUpdate();
end
1017
The BeforeExpandItem event is fired when clicking the drop down filter button. What we can do to prevent that
// BeforeExpandItem event - Fired before an item is about to be expanded (collapsed).
procedure TForm1.Grid1BeforeExpandItem(ASender: TObject; Item : HITEM;var Cancel : OleVariant);
begin
	with Grid1 do
	begin
		OutputDebugString( 'BeforeExpandItem' );
		OutputDebugString( Item );
		OutputDebugString( 'ColumnFromPoint' );
		OutputDebugString( ColumnFromPoint[-1,-1] );
		OutputDebugString( 'ColumnFromPoint return -1, if the user clicks the +/- glitch, else it returns the index of the column where the click occurs.' );
		Items.InsertItem(Item,Null,'new child');
	end
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with Columns do
	begin
		(IUnknown(Add('Items')) as EXGRIDLib_TLB.Column).DisplayFilterButton := True;
	end;
	with Items do
	begin
		ItemHasChildren[InsertItem(Null,Null,'Group 1')] := True;
		ItemHasChildren[InsertItem(Null,Null,'Group 2')] := True;
	end;
	EndUpdate();
end
1016
How do I change the drop down filter icon/button (black)

with Grid1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAEhABXUIQAAYAQGKIcBiAKBQAGYBIJDEMgzDDAUBjKKocQTC4AIQjCK4JDKHYJRpHEZyCA8EhqGASRAFUQBYiWE4oSpLABQaK0ZwIGyRIrkGQgQg' + 
	'mPYDSDNU4zVIEEglBI0TDNczhNDENgtGYaJqHIYpZBcM40TKkEZoSIITZcRrOEBiRL1S0RBhGcRUHZlWzdN64LhuK47UrWdD/XhdVzXRbjfz1Oq+bxve48Br7A5yYThd' + 
	'r4LhOFQ3RjIL4xbIcUwGe6VZhjOLZXjmO49T69HTtOCYBEBA');
	end;
	Background[EXGRIDLib_TLB.exCursorHoverColumn] := $ffffffff;
	Background[EXGRIDLib_TLB.exHeaderFilterBarButton] := $1000000;
	Background[EXGRIDLib_TLB.exBackColorFilter] := $10000;
	Background[EXGRIDLib_TLB.exForeColorFilter] := $ffffff;
	Description[EXGRIDLib_TLB.exFilterBarExclude] := '<bgcolor 0><fgcolor ffffff> Exclude </fgcolor></bgcolor>';
	HeaderAppearance := EXGRIDLib_TLB.None2;
	BackColorHeader := RGB(0,0,0);
	ForeColorHeader := RGB(255,255,255);
	HeaderVisible := True;
	with (IUnknown(Columns.Add('Filter')) as EXGRIDLib_TLB.Column) do
	begin
		FilterList := Integer(EXGRIDLib_TLB.exShowExclude) Or Integer(EXGRIDLib_TLB.exShowCheckBox);
		DisplayFilterButton := True;
		AllowSort := False;
		AllowDragging := False;
	end;
	with Items do
	begin
		AddItem('One');
		AddItem('Two');
		AddItem('Three');
	end;
	EndUpdate();
end
1015
How do I change the drop down filter icon/button (white)

with Grid1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(2,'gBFLBCJwBAEHhEJAAEhABX8GACAADACAxSDEMQBQKAAzQFAYbhgHCGAAGQaBUgmFgAQhFcZQSKUOQTDKNYykCIRSDUJYkSZEIyjBI8ExXFqNACkGKwYgmNYiTLAcgANJ' + 
	'0WBaGIZJ4gOT5fDKMoEDRRYADFCscwxJybQAqGQKKb+VgAVY/cTyBIAEQSKA0TDOQ5TSKWB4JPZQRBEbZMNBtBIUJquKaqShdQJCU5FdY3Xblez9P7AMBwLFEC4NQ8YN' + 
	'YuPhjR4dRTIMhvVAsUArFh8Zg9GZZFjmDIDT4ydBLTQwcyVIKnP5qOa6XbmPoCQDYKxZHYxPzVDa3axuL76dqCAT7XrXNy1TbNRrzQKfcJqfCbdw2YaDZLOOT3fjuI4h' + 
	'hKaRzFAHJ+jYQ4xHuY4gHuGIXGeExqC8Tp6C+PoEm+G5ImycRgh0XwvDGa5rgOeoejyXwnFeQp2mkf5ClgBB9gCWIYAwfYAEKV58mkdwOggNArgOXY2EWLoDkKOA0mgb' + 
	'hOGgZApgaSBIHWSYHSmbApgYThmESZYJkIeIkgeCpfliLIHgpMIcmUYYYmODAlg2SI4mWfRfGOEguDcCRjFYAJihCQhJBSDoRmONgKEcI4kFCEJhhOVYTmYnAlEAQhWB' + 
	'MJYJGYWoWmWSR2F6F5lnkWAQhUAgpEieRWEuSYkjWGpmkmNhuhuZwJkYcocmaaYkjyEhngnUA6lEFAlAEgI=');
		Add(1,'CP:2 -4 -4 2 4');
	end;
	Background[EXGRIDLib_TLB.exHeaderFilterBarButton] := $1000000;
	Background[EXGRIDLib_TLB.exCursorHoverColumn] := BackColor;
	HeaderAppearance := EXGRIDLib_TLB.None2;
	HeaderHeight := 24;
	BackColorHeader := RGB(255,255,255);
	HeaderVisible := True;
	with (IUnknown(Columns.Add('Filter')) as EXGRIDLib_TLB.Column) do
	begin
		DisplayFilterButton := True;
		AllowSort := False;
		AllowDragging := False;
	end;
	EndUpdate();
end
1014
How can I draw a solid frame around the the focusing item

with Grid1 do
begin
	BeginUpdate();
	SingleSel := False;
	DefaultItemHeight := 20;
	with VisualAppearance do
	begin
		RenderType := -1;
		Add(1,'gBFLBCJwBAEHhEJAAEhABOkGACAADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBKUQSDqEYyjGLIXAWCYSAAMIwDKAUEwpFAZBhgeDYMiSNoYDJCM4wHI' + 
	'URRJFCUJSGWQpTgSIgyT5HFIxXKoASbJabZLhWS6EpWOotTbIQQRYCkEyfKKfZyGURZQqOKA1DBZErWTJESRFJqLazgO4LAhyQYrVgAErzVKVCRNOqbJzADApdpGQJTU' + 
	'LDNTQHRFIyhOSnIRrWbMAhid6JUZiVT4dBOIYhSYANAqCwLFqrDJmWrpV5WZjlZ47V6BdAyXJsIrmFJEXaOGhyDDlGybSDZYryfZhUziUw4XjbWwZDqPF6DKTTdSGLRE' + 
	'E8WZVlURZvDaep3C+AY8kAYRgGCCBJECUhjDoHROEYWgoAGTQ1CEEx9lGMY0CQUYSnuZQDBGBYFlOH5+H+igGAKAJgEgFgGgGVgDn4CoCmCSA2A6A5hAgDgQgSYRIE4E' + 
	'oFGGCBiBeBhhkgPgbgcYgICoH4IGGWIOCSBhiGiHgVgoYooFoAoLGIWI+DCCgjCiTgrgII4ImYOoOmOSJ2AYOpWlQDQBICA=');
	end;
	ShowFocusRect := True;
	Background[EXGRIDLib_TLB.exShowFocusRect] := $1000000;
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('P1')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with Items do
	begin
		h := AddItem('Root');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1013
The frame around the focusing item is not very clear. Can I show it larger or more cleared (sample 2)

with Grid1 do
begin
	BeginUpdate();
	SingleSel := False;
	DefaultItemHeight := 20;
	ShowFocusRect := True;
	with VisualAppearance do
	begin
		RenderType := -1;
		Add(2,'gBFLBCJwBAEHhEJAAEhABPEGACAADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBKUQSDqEYyjGLIXAWCYSAAMIwDKAUEwpFAZBhgeCRUgyJI3RgMUIzVA' + 
	'cRRFEiUJQlIZZCjOAw0SIMU7xZRcNxsACnaZnCR4NiuRYiUhOcqzRIQIQ4CiEahqOgJbDUJYwWZKAyjBY8XTZFCSJCpeJ6egOc5jRxQUp1WAEXx3GSsJKvCZ5cADBY+V' + 
	'LQNS0JBtMSTKSLaiuWoIJqCPaDRheWKQJh1NSnLqEcjyYANDxDCZlWzAYxWTZ2Uz7N7PbB0HY4DyPGKZYrfESVRbQcZNS6nNigPI9XhfGq6VjRe63ZaOaYpWrnOJqTRW' + 
	'jOKYujWdZ2BGO5lkuBAAkmcQkDmDBEAwEQJCgGhMGcQ4pkiSxGAAOYmkQIhvkYNg2gSCgyj+LI4GIMIwF2XQoAYAoAmASAWAaAZgggJgKFiT54DYDoDmECBGBKBJgGgT' + 
	'gWgWYRoFYGIGmGOBqByB5hCgegggiYJYgoJIICIaIeByChiigYgsgsYYYBYMIKCMKJOCuDRjGiOgLg6Y5InYPoPmQCAkmsXAQDQBCAg=');
		Add(3,'CP:2 -3 0 3 0');
	end;
	Background[EXGRIDLib_TLB.exShowFocusRect] := $3010101;
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('P1')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with Items do
	begin
		h := AddItem('Root');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1012
The frame around the focusing item is not very clear. Can I show it larger or more cleared (sample 1)

with Grid1 do
begin
	BeginUpdate();
	SingleSel := False;
	ShowFocusRect := True;
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAEhABHoDg6AADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBIZQ7BKNIxjSJwFiCCQwSDKEjyCKcGRHF6MI6gOYpCgOIYjRJNIASVA' + 
	'ceAAGaUZrjSgobjmOYhAJCLqhYIgASXJqLaBlOCaAieSc+QhjQJIJoeCZXU5TFg1BTsOhqEqcRiseaRVDCaIJWzbdYWLDdNQHHKYLjnWorbpSJZ5XjNEySDQkMS9PrEJ' + 
	'7vST8FBCdAABLJUB2BR9RwxRafKpnWwJDpmCaOQLXEB5DK1PyVMTKYrtGy7GrIAJxWxbV4UHh+QABOzIMAvHKJMwvHYcUZne5XVLeF41HbONogPaJZyIAK2cLROq6Xo7' + 
	'GEcJZEcLASB4DwvgWUZlE6AQQhKAYkkYdA6hyDIwHgSoqFwQgmnsYxjGgSIiBOTpSEiAwRgOJI7j4JAHA6U5wm0MpPlOBIjD8TZiGYCICiCGAuA6AxhAgMgSgOYQ4DYB' + 
	'g/g6cw1n+ABOmMMJ9DmCwjnScw4RsVJngkYh4hoKIKmKKI2CmC5ikiQgqgiT5jhyMw8g4QwIn0OIKEiCJhD8DwTGyfA7k0WQOEWEQkGkJhIhKZB5DYSoTiSCQEn4PQOC' + 
	'OXJcCeIJjliaIQk0aRyF4O5llmAhfhgZhJg4ZoYiaAxYn4PZOhOZJaCUZYTiYQw1mcOZUm+HQnHmWh4h6Z4pnYeYfk0eYsmqG4nAgNJ2DqD5DkCWoiGiOgqgyI5omoRo' + 
	'NiSaQKFKEojCaM4ugSFhOjkAJcieKgDkaH4oioGoOiaKRqgqEoqDddwyhuAxPgOMJ8DyDZqk6NYtCsapmjiLprHqdo6i+K5K1oPhOlqPgKD4DpjnII4yiOewuk6MxtAs' + 
	'MpSjObQ7EaT4wk6ewYn0PgPAiCJkjeLgDk6X44i4G4OmaORuguEpqDkLAzkaWg+E8GIUmaPIvEOVpzj2Lxbl6eo+G+S5in4OYPmOaJyjuTwjnYWpBg6DAjAqQZwkwJwN' + 
	'kKcJsEcEJCDBEpaD6Dw8BiapGjGSgfB2RpxmyBwgkicZ8haBw/g+M5TBcPQPlOXJskscp8jsMJMnMLJXDGTZzEyYw2kwMoDlcFw9i2M4/EGUJPg0CxFlENBtCcSJSnQf' + 
	'Q0m+SgPHsaJ7lALZLG6XZVHWDRfFqVY1k0ZxdladYTnifJUGaeAWAeMnSGcGWgBObJ3lWbwdjKW5cHcTZPHaLkN4GxXDlFqFsA4uRbBOGAFAEIzAsDEFOBkfYqR4D6AO' + 
	'BEYo8QuBvAmMceInBDgcD0JwOIqQyJ1DMAwG4IANDnHSMoK4QhOgMBGNEIQvQWAdGenETIswGiddsAAQAgCAgA==');
		Add(2,'gBFLBCJwBAEHhEJAAEhABeEGACAADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBIZQ7BKNIxjSJwFgmEgADDFIBQSLAYROGSDJBGODJDjWGIeQLOEhQHI' + 
	'MRxPE6UYLhWYpBDKPYcUbGc7yBBMVwGf59XzACoKSheQIVSDQkw6Fo6NYhAxHALyNRkBy8f60KjtGpodDUJYvW5JYyjBZ8EznOqbJBkeJ7BgOe5NQjaD72VgdWQJFSWJ' + 
	'ajWYYJDOJY2ZAAE5TVINEwxJbDaylChIdxaF6WAzZEBhBYoATPNLBMrhWqKDw2XaQWBCOgwHYeR5LU7BdRwbIrRq2eAAXbcVyXfDddZlBK+QA0SK9lRVTKvJZmKgBWw1' + 
	'COSxmAAGw4kcNx1iKFBiCAfQsG8lJemucg7nsXpUHOOxrm+DI3jOH4XAOBx2nscw0j2HhPG4L5uGEVIECQCBCEUAYkGMHQHFGSBlGaAxkEgQgTGCVBsDYQhCgQJZrHKU' + 
	'ggGEShkFGNgIlsNpPnMHJHD+TADAIJIJiIWIeCqChikiIgmgiD5zHyXxgiACJKCuC4jHiZgtg6I4IlkCQwkwOIonMPJjEkFhGhGZBpA4KoMBCGJuEiE5lAkGg7hMY4JE' + 
	'YVoUCUNAOE6FZl0KWQACWOR2GKF5mBmChchkJRZhoXYaCKKYqGuDglEmNhuhWZpIiYc4dCcCRqGmHZlgm2YxAwSQKESHwkFkKgpiAIAIH4PIimOOg2DiChoiQJRRD+TZ' + 
	'DHCfwyAyCgyg+JpiioYJ/DgDgIlECQ6lwRAEICA=');
		Add(3,'CP:2 -2 0 2 0');
	end;
	SelBackColor := $1000000;
	SelForeColor := RGB(0,0,0);
	Background[EXGRIDLib_TLB.exShowFocusRect] := $3ff0000;
	LinesAtRoot := EXGRIDLib_TLB.exLinesAtRoot;
	with (IUnknown(Columns.Add('P1')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with Items do
	begin
		h := AddItem('Root');
		InsertItem(h,Null,'Child 1');
		InsertItem(h,Null,'Child 2');
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1011
I have a column right-aligned. How can I display its check box aligned to the right, as it appears to the left of the cell's caption

with Grid1 do
begin
	BeginUpdate();
	ColumnAutoResize := True;
	DrawGridLines := EXGRIDLib_TLB.exVLines;
	with Columns do
	begin
		with (IUnknown(Add('Left')) as EXGRIDLib_TLB.Column) do
		begin
			AllowSizing := False;
			Width := 96;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			FormatColumn := '0 pos `A-Z`';
		end;
		with (IUnknown(Add('Center')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderAlignment := EXGRIDLib_TLB.CenterAlignment;
			Alignment := HeaderAlignment;
			AllowSizing := False;
			Width := 96;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			FormatColumn := '0 pos `A-Z`';
		end;
		with (IUnknown(Add('Right')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderAlignment := EXGRIDLib_TLB.RightAlignment;
			Alignment := HeaderAlignment;
			AllowSizing := False;
			Width := 96;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			FormatColumn := '0 pos `A-Z`';
			Def[EXGRIDLib_TLB.exCellDrawPartsOrder] := 'caption,check,icon,icons,picture';
		end;
		Add('');
	end;
	with Items do
	begin
		CellState[OleVariant(AddItem('Item 1')),OleVariant(3)] := 1;
		CellState[OleVariant(AddItem('Item 2')),OleVariant(2)] := 1;
		CellState[OleVariant(AddItem('Item 3')),OleVariant(1)] := 1;
	end;
	EndUpdate();
end
1010
Can I display the column's multiple-lines caption vertically oriented (method 2)

with Grid1 do
begin
	BeginUpdate();
	HeaderHeight := 48;
	ColumnAutoResize := True;
	with Columns do
	begin
		Add('And others ...');
		with (IUnknown(Add('')) as EXGRIDLib_TLB.Column) do
		begin
			HTMLCaption := 'First Column';
			HeaderVertical := True;
			Width := 36;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Def[EXGRIDLib_TLB.exCellPaddingLeft] := OleVariant(8);
			Position := 0;
		end;
		with (IUnknown(Add('')) as EXGRIDLib_TLB.Column) do
		begin
			HTMLCaption := '<c><b>Second Column';
			HeaderVertical := True;
			Width := 36;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Def[EXGRIDLib_TLB.exCellPaddingLeft] := OleVariant(8);
			Position := 1;
		end;
		with (IUnknown(Add('')) as EXGRIDLib_TLB.Column) do
		begin
			HTMLCaption := '<r>Third Column';
			HeaderVertical := True;
			Width := 36;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Def[EXGRIDLib_TLB.exCellPaddingLeft] := OleVariant(8);
			Position := 2;
		end;
	end;
	with Items do
	begin
		CellState[OleVariant(AddItem('Item 1')),OleVariant(3)] := 1;
		CellState[OleVariant(AddItem('Item 2')),OleVariant(2)] := 1;
		CellState[OleVariant(AddItem('Item 3')),OleVariant(1)] := 1;
	end;
	EndUpdate();
end
1009
Can I display the column's multiple-lines caption vertically oriented (method 1)

with Grid1 do
begin
	BeginUpdate();
	HeaderHeight := 48;
	HeaderSingleLine := False;
	ColumnAutoResize := True;
	with Columns do
	begin
		Add('And others ...');
		with (IUnknown(Add('First Column')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderVertical := True;
			Width := 36;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Def[EXGRIDLib_TLB.exCellPaddingLeft] := OleVariant(8);
			Position := 0;
		end;
		with (IUnknown(Add('Second Column')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderBold := True;
			HeaderVertical := True;
			Width := 36;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Def[EXGRIDLib_TLB.exCellPaddingLeft] := OleVariant(8);
			Position := 1;
		end;
		with (IUnknown(Add('Third Column')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderVertical := True;
			Width := 36;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Def[EXGRIDLib_TLB.exCellPaddingLeft] := OleVariant(8);
			Position := 2;
		end;
	end;
	with Items do
	begin
		CellState[OleVariant(AddItem('Item 1')),OleVariant(3)] := 1;
		CellState[OleVariant(AddItem('Item 2')),OleVariant(2)] := 1;
		CellState[OleVariant(AddItem('Item 3')),OleVariant(1)] := 1;
	end;
	EndUpdate();
end
1008
Can I display the column's caption vertically oriented (method 2)

with Grid1 do
begin
	BeginUpdate();
	HeaderHeight := 48;
	ColumnAutoResize := True;
	with Columns do
	begin
		Add('And others ...');
		with (IUnknown(Add('')) as EXGRIDLib_TLB.Column) do
		begin
			HTMLCaption := 'First';
			HeaderVertical := True;
			Width := 20;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Position := 0;
		end;
		with (IUnknown(Add('')) as EXGRIDLib_TLB.Column) do
		begin
			HTMLCaption := '<c><b>Second';
			HeaderVertical := True;
			Width := 20;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Position := 1;
		end;
		with (IUnknown(Add('')) as EXGRIDLib_TLB.Column) do
		begin
			HTMLCaption := '<r>Third';
			HeaderVertical := True;
			Width := 20;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Position := 2;
		end;
	end;
	with Items do
	begin
		CellState[OleVariant(AddItem('Item 1')),OleVariant(3)] := 1;
		CellState[OleVariant(AddItem('Item 2')),OleVariant(2)] := 1;
		CellState[OleVariant(AddItem('Item 3')),OleVariant(1)] := 1;
	end;
	EndUpdate();
end
1007
Can I display the column's caption vertically oriented (method 1)

with Grid1 do
begin
	BeginUpdate();
	HeaderHeight := 48;
	ColumnAutoResize := True;
	with Columns do
	begin
		Add('And others ...');
		with (IUnknown(Add('First')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderVertical := True;
			Width := 20;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Position := 0;
		end;
		with (IUnknown(Add('Second')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderBold := True;
			HeaderVertical := True;
			Width := 20;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Position := 1;
		end;
		with (IUnknown(Add('Third')) as EXGRIDLib_TLB.Column) do
		begin
			HeaderVertical := True;
			Width := 20;
			AllowSizing := False;
			Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
			Position := 2;
		end;
	end;
	with Items do
	begin
		CellState[OleVariant(AddItem('Item 1')),OleVariant(3)] := 1;
		CellState[OleVariant(AddItem('Item 2')),OleVariant(2)] := 1;
		CellState[OleVariant(AddItem('Item 3')),OleVariant(1)] := 1;
	end;
	EndUpdate();
end
1006
How do I automatically bold items being checked

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
end;

with Grid1 do
begin
	BeginUpdate();
	SelBackMode := EXGRIDLib_TLB.exTransparent;
	with ConditionalFormats.Add('%CS0','check') do
	begin
		Bold := True;
	end;
	(IUnknown(Columns.Add('Items')) as EXGRIDLib_TLB.Column).Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
	(IUnknown(Columns.Add(Grid1.ConditionalFormats.Item['check'].Expression)) as EXGRIDLib_TLB.Column).FormatColumn := Grid1.ConditionalFormats.Item['check'].Expression;
	with Items do
	begin
		AddItem('Item 1');
		CellState[OleVariant(AddItem('Item 2')),OleVariant(0)] := 1;
		AddItem('Item 3');
	end;
	EndUpdate();
end
1005
How can I use the CellState with ConditionalFormat/ComputedField/FormatColumn

// CellStateChanged event - Fired after cell's state has been changed.
procedure TForm1.Grid1CellStateChanged(ASender: TObject; Item : HITEM;ColIndex : Integer);
begin
end;

with Grid1 do
begin
	BeginUpdate();
	LinesAtRoot := EXGRIDLib_TLB.exGroupLinesInsideLeaf;
	SelBackMode := EXGRIDLib_TLB.exTransparent;
	with (IUnknown(Columns.Add('Items')) as EXGRIDLib_TLB.Column) do
	begin
		Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
		PartialCheck := True;
	end;
	with (IUnknown(Columns.Add('Format')) as EXGRIDLib_TLB.Column) do
	begin
		FormatColumn := '%CS0';
		Caption := FormatColumn;
		Def[EXGRIDLib_TLB.exCellForeColor] := OleVariant(8421504);
		Def[EXGRIDLib_TLB.exHeaderForeColor] := Def[EXGRIDLib_TLB.exCellForeColor];
	end;
	with Items do
	begin
		h := AddItem('Root');
		InsertItem(h,Null,'Item 1');
		CellState[OleVariant(InsertItem(h,Null,'Item 2')),OleVariant(0)] := 1;
		CellState[OleVariant(InsertItem(h,Null,'Item 3')),OleVariant(0)] := 1;
		ExpandItem[h] := True;
	end;
	EndUpdate();
end
1004
How can I use the CellData with ConditionalFormat/ComputedField/FormatColumn

with Grid1 do
begin
	BeginUpdate();
	Columns.Add('Items');
	with (IUnknown(Columns.Add('Format')) as EXGRIDLib_TLB.Column) do
	begin
		FormatColumn := '%CD0';
		Caption := FormatColumn;
		Def[EXGRIDLib_TLB.exCellForeColor] := OleVariant(8421504);
		Def[EXGRIDLib_TLB.exHeaderForeColor] := Def[EXGRIDLib_TLB.exCellForeColor];
	end;
	with Items do
	begin
		CellData[OleVariant(AddItem('Item 1')),OleVariant(0)] := OleVariant(1234);
		CellData[OleVariant(AddItem('Item 2')),OleVariant(0)] := 'this is just an user data';
		CellData[OleVariant(AddItem('Item 3')),OleVariant(0)] := '1/1/2001';
	end;
	EndUpdate();
end
1003
How can I use the CellValue/CellCaption with ConditionalFormat/ComputedField/FormatColumn

with Grid1 do
begin
	BeginUpdate();
	with (IUnknown(Columns.Add('Items')) as EXGRIDLib_TLB.Column) do
	begin
		with Editor do
		begin
			EditType := EXGRIDLib_TLB.DropDownListType;
			AddItem(1,'Item 1',Null);
			AddItem(2,'Item 2',Null);
			AddItem(3,'Item 3',Null);
		end;
	end;
	with (IUnknown(Columns.Add('Format')) as EXGRIDLib_TLB.Column) do
	begin
		FormatColumn := '%0';
		Caption := FormatColumn;
		Def[EXGRIDLib_TLB.exCellForeColor] := OleVariant(8421504);
		Def[EXGRIDLib_TLB.exHeaderForeColor] := Def[EXGRIDLib_TLB.exCellForeColor];
		AllowSizing := False;
	end;
	with (IUnknown(Columns.Add('Format')) as EXGRIDLib_TLB.Column) do
	begin
		FormatColumn := '%C0';
		Caption := FormatColumn;
		Def[EXGRIDLib_TLB.exCellForeColor] := OleVariant(8421504);
		Def[EXGRIDLib_TLB.exHeaderForeColor] := Def[EXGRIDLib_TLB.exCellForeColor];
		AllowSizing := False;
	end;
	with Items do
	begin
		AddItem(OleVariant(1));
		CellValue[OleVariant(AddItem(OleVariant(0))),OleVariant(0)] := OleVariant(2);
		AddItem(OleVariant(2));
	end;
	EndUpdate();
end
1002
Can I display the radio-button with a solid color

with Grid1 do
begin
	BeginUpdate();
	RadioImage[False] := 32699122;
	RadioImage[True] := 16777216;
	(IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column).Def[EXGRIDLib_TLB.exCellHasRadioButton] := OleVariant(True);
	with Items do
	begin
		AddItem('Radio 1');
		CellState[OleVariant(AddItem('Radio 2')),OleVariant(0)] := 1;
		AddItem('Radio 1');
	end;
	EndUpdate();
end
1001
Can I display the check-box with a solid color

with Grid1 do
begin
	BeginUpdate();
	CheckImage[EXGRIDLib_TLB.Unchecked] := 32699122;
	CheckImage[EXGRIDLib_TLB.Checked] := 16777216;
	(IUnknown(Columns.Add('Check')) as EXGRIDLib_TLB.Column).Def[EXGRIDLib_TLB.exCellHasCheckBox] := OleVariant(True);
	with Items do
	begin
		AddItem('Check 1');
		CellState[OleVariant(AddItem('Check 2')),OleVariant(0)] := 1;
		AddItem('Check 3');
	end;
	EndUpdate();
end